-
Notifications
You must be signed in to change notification settings - Fork 28
Add URL parameter filtering to Contributors page with full SEO preservation #498
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add URL parameter filtering to Contributors page with full SEO preservation #498
Conversation
Co-authored-by: LukasWallrich <60155545+LukasWallrich@users.noreply.github.com>
Co-authored-by: LukasWallrich <60155545+LukasWallrich@users.noreply.github.com>
Co-authored-by: LukasWallrich <60155545+LukasWallrich@users.noreply.github.com>
Co-authored-by: LukasWallrich <60155545+LukasWallrich@users.noreply.github.com>
Co-authored-by: LukasWallrich <60155545+LukasWallrich@users.noreply.github.com>
Co-authored-by: LukasWallrich <60155545+LukasWallrich@users.noreply.github.com>
|
👍 All image files/references (if any) are in webp format, in line with our policy. |
|
|
|
|
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
10 similar comments
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
2 similar comments
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
This needs local testing - I'm afraid that running data processing on this branch will lead to an artefact that break master deployment? |
|
✅ This PR has been deployed to staging as part of an aggregated deployment. View at: https://staging.forrt.org |
|
Copilot's initial proposal didn't work as-is. While the JS code for filtering was functional, the Python code in tenzing.py generated a mix of Markdown and HTML that Hugo couldn't parse correctly. Commit f2e9dc fixes this parsing issue. Commit bb2721b implements additional features:
This is now ready for review @forrtproject/team-website |
|
✅ Staging Deployment Status This PR has been successfully deployed to staging as part of an aggregated deployment. Deployed at: 2026-01-05 17:02:27 UTC The staging site shows the combined state of all compatible open PRs. |
✅ Spell Check PassedNo spelling issues found in this PR! 🎉 |
✅ Spell Check PassedNo spelling issues found in this PR! 🎉 |
richarddushime
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 👍
|
The changes will be visible after data processing run |
|
Now available here https://forrt.org/contributors/ |


Contributors page now supports dynamic filtering by project (
?project=glossary) and role (?role=project-manager) while keeping all data in static HTML for search engine indexing.Changes
Data generation (
tenzing.py)"Replications & Reversals"→"replications-and-reversals")data-projectsanddata-rolesattributes containing comma-separated normalized valuesTemplate (
tenzing_template.md)<ul id="contributor-list">for JavaScript accessClient-side filtering (
contributor-filter.js)Implementation
All contributor data remains in static HTML before JavaScript executes, ensuring search engines index everything. Filtering is purely additive client-side enhancement.
Usage Examples
Screenshots
Filtered by Project (Glossary)

Combined Filter (Project + Role)

Security
escapeHtml())html.escape())innerHTMLinjection)Documentation
CONTRIBUTORS_FILTERING.md- User guide with normalization rules and examplesscripts/forrt_contribs/README.md- Script usage for regenerating pageIMPLEMENTATION_NOTES.md- Architecture and maintenance notesDeployment
To activate filtering on existing contributors data:
cd scripts/forrt_contribs python3 tenzing.py cp tenzing.md ../../content/contributors/tenzing.mdOriginal prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.